#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#define FLAG_PUBLIC     1
#define FLAG_PROTECTED  2
#define FLAG_PRIVATE    4
#define FLAG_STATIC     8
#define FLAG_ABSTRACT  16
#define FLAG_FINAL     32

struct Name {
    char identifier[128];
    
    struct Name *next;
};

struct NameList {
    struct Name *name;
    
    struct NameList *next;
};

enum SymbolType { Var, Func, Class, Constructor, Operator, Unknown };

struct SymbolTable {
    enum SymbolType symbolType;
    char internal[128];
    int modifiers;
    struct Name *name;
    struct Name *type;
    struct NameList *argumentTypes;
    
    struct SymbolTable *next;
};

#ifdef  __cplusplus
}
#endif

